# 我们有了环境maze ，我们有了智能体Agent(Qtable) 接下来我们完成Rl的流程，不断的交互


from maze_env import Maze
from RL_brain import QlearningTable


def update():
    # episode 代表着回合，就跟打游戏一样么
    for episode in range(100):
        # 每一回合开始我们agent处于maze当中的一个位置，比如组左上角
        observation = env.reset()
        while True:
            # 渲染环境
            env.render()
            action =  agent.choose_action(str(observation))
            # 让环境更具我们给出的action行为返回  下一时刻的状态 、奖励 done标志位
            observation_,reward,done = env.step(action)
            # 更新我们的qtable
            agent.learn(str(observation),action,reward, str(observation_))
            # 下一次agent镜像行为选择的时候，是基于下一时刻的观察状态来的
            observation = observation_

            if done:
                break
    print("游戏结束")
    env.deiconify()

if __name__ == "__main__":
    env = Maze() # 初始化我们的环境
    # agent = QlearningTable(actions=list(range.env.n_actions))
    # env.n_actions 的值是4 ，代表上下左右；list(range(env.n_actions)) 其实会返回【0,1,2,3】
    agent = QlearningTable(actions=list(range(env.n_actions)))

    env.after(100, update)

    env.mainloop()





